﻿namespace ECM7.Themes.Domain.Services
{
	using System.IO;
	using JsonExSerializer;

	/// <summary>
	/// FileHelper
	/// </summary>
	public static class JsonHelper
	{
		/// <summary>
		/// Загрузка объекта из файла
		/// </summary>
		/// <param name="path">Папка для сохранения файла</param>
		/// <param name="filename">Название файла</param>
		/// <param name="obj">Сериализуемый объект</param>
		public static void SaveToFile(string path, string filename, object obj)
		{
			string fullPath = Path.Combine(path, filename);
			SaveToFile(fullPath, obj);
		}

		/// <summary>
		/// Сохранение объекта в файл
		/// </summary>
		/// <param name="path">Путь к файлу</param>
		/// <param name="obj">Сериализуемый объект</param>
		public static void SaveToFile(string path, object obj)
		{
			using (FileStream stream = new FileStream(path, FileMode.Create))
			{
				Serializer serializer = new Serializer(obj.GetType());
				serializer.Serialize(obj, stream);
			}
		}

		/// <summary>
		/// Загрузка объекта из файла
		/// </summary>
		/// <typeparam name="T">Тип объекта</typeparam>
		/// <param name="path">Путь к файлу</param>
		public static T LoadFromFile<T>(string path) where T : class
		{
			using (FileStream stream = new FileStream(path, FileMode.Open))
			{
				Serializer serializer = new Serializer(typeof(T));
				return serializer.Deserialize(stream) as T;
			}
		}

		/// <summary>
		/// Загрузка объекта из файла
		/// </summary>
		/// <typeparam name="T">Тип объекта</typeparam>
		/// <param name="path">Папка, в которй лежит файл</param>
		/// <param name="filename">Название файла</param>
		public static T LoadFromFile<T>(string path, string filename) where T : class
		{
			return LoadFromFile<T>(Path.Combine(path, filename));
		}
	}
}
